# import re
# def checkPassword(password):
#     return bool(re.fullmatch(r'^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#S%*_\\-+=:.?])[A-Za-z0-9~@#S%*_\\-+=:.?]{8,20}$', password))

# #测试用例分别为：长度不够，完全符合，含有无效字符，长度过长，不含数字，不含小写字母，不含大写字母，不含特殊字符
# passwords = ['aA1#a','AAA123__a','adasd1AS$$\\','asd232ASD&&asdqwasfa2','asdadASD$%','123ASD$$$$','123asd&&$','123qweASD']
# for s in passwords:
#     print(checkPassword(s))
 
import re
import numpy as np
def checkPassword(password):
    return bool(re.fullmatch(r'^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#\$%*_\-+=:.?])[A-Za-z0-9~@#\$%*_\-+=:.\?]{6,16}$', password))  # 返回布尔值表示是否符合

# 测试用例
passwords = [
    'aA1#a',            # 长度不够
    'AAA123__a',        # 完全符合
    'adasd1AS$$\\',     # 含有无效字符
    'asd232ASD&&asdqwasfa2',  # 长度过长
    'asdadASD$%',       # 不含数字
    '123ASD$$$$',       # 不含小写字母
    '123asAd$',        # 不含大写字母
    '123qweASD?'         # 不含特殊字符
]

for s in passwords:
    print(f"{s}: {checkPassword(s)}")

print(np.diag((1,2,3,4)).size)